package com.swanclouds.model.account;

import com.swanclouds.common.Buildable;
import com.swanclouds.model.DeviceEntity;
import com.swanclouds.model.ModelEntity;
import com.swanclouds.model.account.builder.LdapControllerBuilder;

import java.util.List;
import java.util.Map;

/**
 * @author 张立强
 * @version jdk1.8.0
 */
public interface LdapController extends DeviceEntity, Buildable<LdapControllerBuilder> {
    /**
     * 域控制器的地址
     * @return this Ldap Controller address
     */
    String getLdapServerAddress();

    /**
     * 域控制器的端口号
     * @return this Ldap Controller port
     */
    Integer getLdapPort();

    /**
     * 域控制器的用户域
     * @return this Ldap Controller domain
     */
    String getUserDomain();

    /**
     * Ldap代理用户标识名
     * @return this Ldap Controller user sign
     */
    String getBindDN();
    /**
     * Ldap代理用户的认证密码
     * @return this Ldap Controller user password
     */
    String getBindPassword();

    /**
     * 证书启用的使能
     * @return this Certificate enabled
     */
    Boolean getCertificateVerificationEnabled();

    /**
     * 证书吊销检查使能
     * @return this verification enabled
     */
    Boolean getCrlVerificationEabled();

    /**
     * 证书吊销列表有效期起始日期
     * @return this from
     */
    String getCrlValidFrom();

    /**
     * 证书吊销列表有效期截止日期
     * @return this to
     */
    String getCrlValidTo();

    /**
     * 证书校验级别,可选值["Demand","Allow"],仅在证书启用使能状态下生效
     * @return this certificate Level
     */
    String getCertificateVerificationLevel();

    /**
     * 证书信息
     * @return this Certification information
     */
    Cert getCertificateInformation();

    /**
     * 证书链信息
     * @return the server cert
     */
    ServerCert getCertificateChainInformation();

    /**
     * 中间证书
     * @return the intermediate Certs
     */
    List<Cert> getIntermediateCert();

    /**
     * 根证书
     * @return the root Cert
     */
    Cert getRootCert();

    /**
     * Ldap用户组
     * @return the Ldap Groups
     */
    List<LdapGroup> getLdapGroups();
    /**
     *
     * @return Map
     */
    Map<String,Object> getActions();

    interface ServerCert extends ModelEntity {
        /**
         * 服务器证书
         * @return the server cert
         */
        Cert getServerCert();
    }

    interface Cert extends ModelEntity {
        /**
         * 证书的颁发者
         * @return issue by
         */
        String getIssueBy();

        /**
         * 证书的使用者
         * @return issue to
         */
        String getIssueTo();

        /**
         * 证书的开始时间
         * @return this from time
         */
        String getValidFrom();

        /**
         * 证书的结束时间
         * @return this to time
         */
        String getValidTo();

        /**
         * 证书的序列号
         * @return the cert SerialNumber
         */
        String getSerialNumber();

        /**
         * 证书的签名算法
         * @return this cert SignatureAlgorithm
         */
        String getSignatureAlgorithm();

        /**
         * 证书的使用方法
         * @return the cert usage
         */
        String getKeyUsage();

        /**
         * 证书的公钥长度
         * @return the key length
         */
        Integer getPublicKeyLengthBits();
    }

}
